/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dados.SQLConnection;

import dados.Medicamento;
import dados.MedicamentoNormal;
import dados.Receita;
import dados.ReceitaEspecial;
import dados.ReceitaNormal;
import dados.ReceitaRenovavel;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 *
 * @author rmb
 */
public class SQLReceita {
    
    private Connection connection;
    
    public SQLReceita(Connection con) {
        connection = con;
    }
    
    public ArrayList<MedicamentoNormal> getMedicamentosNormais(String nome) {
        String quer = "select count(*) from lei2011_g50.med where lei2011_g50.med.class_estup_id = 9 and lei2011_g50.med.nome like ?";
        String quer2 = "select * from lei2011_g50.med where lei2011_g50.med.class_estup_id = 9 and lei2011_g50.med.nome like ?";
        
        ArrayList<MedicamentoNormal> medicamentos = new ArrayList<MedicamentoNormal>();
        
        try {
            PreparedStatement ps = connection.prepareStatement(quer);
            ps.setString(1, "%"+nome+"%");
            ResultSet rs = ps.executeQuery();
            int count = 0;
            
            while (rs.next())
                count = rs.getInt(1);
            
            rs.close();
            ps.close();           
                             
            if(count < 40) {
                PreparedStatement ps2 = connection.prepareStatement(quer2);
                ps2.setString(1, "%"+nome+"%");
                ResultSet rs2 = ps2.executeQuery();
                boolean generico;
                                
                
                while(rs2.next()) {
                    generico = false;
                    if (rs2.getString("generico").equals("S"))
                        generico = true;
                    medicamentos.add(new MedicamentoNormal(String.valueOf(rs2.getInt("med_id")), rs2.getString("nome"), rs2.getString("dos_comp"), 0, "", generico));
                }
            }
            
        }   
        catch(SQLException e) {}
        
        return medicamentos;
        
    }
    
    public MedicamentoNormal getMedicamentoNormalDescr (String descr) {
        
        String quer = "select * from lei2011_g50.med where lei2011_g50.med.class_estup_id = 9 and lei2011_g50.med.nome = ? and lei2011_g50.med.dos_comp = ?";        
        
        StringTokenizer st = new StringTokenizer(descr,"*");
        String nome = st.nextToken();
        nome = nome.trim();        
        String pactivo = st.nextToken() ;
        pactivo = pactivo.trim();
        
        MedicamentoNormal m = null;        
        try {               
                            
            PreparedStatement ps = connection.prepareStatement(quer);            
            ps.setString(1, nome);
            ps.setString(2, pactivo);
            ResultSet rs = ps.executeQuery();
            
            boolean generico;

            if(rs.next()) { 
                generico = false;
                    if (rs.getString("generico").equals("S"))
                        generico = true;
                m = new MedicamentoNormal(String.valueOf(rs.getInt("med_id")), rs.getString("nome"), rs.getString("dos_comp"), 0, "", generico);                
            }
        }                    
        catch(SQLException e) {}
        
        return m;
        
    }
    
    
      public void emitirReceitaEspecial(ReceitaEspecial r) {
        
        String emRecProc = "{call InserirReceita(?,?,?,?,?,?,?,?,?)}";
        
        try {                       
            CallableStatement cs = connection.prepareCall(emRecProc);
            cs.setDate(1,new Date(r.getData().getTimeInMillis()));
            cs.setInt(2,Integer.parseInt(r.getUtente().getNum_utente()));
            cs.setInt(3,Integer.parseInt(r.getMedico().getCedula()));
            cs.setInt(4,Integer.parseInt(r.getConsulta()));
            cs.setString(5, r.getCod_postal());
            cs.setString(6, r.getLocalidade());            
            cs.setInt(7, r.getComparticipacao()); 
            cs.setInt(1, Receita.RECEITA_ESPECIAL);
            cs.execute();
            connection.commit();
        }
        catch(SQLException e) {}
        
    }
    
    public void emitirReceitaRenovavel(ReceitaRenovavel r) {
        
        String emRecProc = "{call InserirReceita(?,?,?,?,?,?,?,?,?)}";
        
        try {                       
            CallableStatement cs = connection.prepareCall(emRecProc);
            cs.setDate(1,new Date(r.getData().getTimeInMillis()));
            cs.setInt(2,Integer.parseInt(r.getUtente().getNum_utente()));
            cs.setInt(3,Integer.parseInt(r.getMedico().getCedula()));
            cs.setInt(4,Integer.parseInt(r.getConsulta()));
            cs.setString(5, r.getCod_postal());
            cs.setString(6, r.getLocalidade());            
            cs.setInt(7, r.getComparticipacao()); 
            cs.setInt(1, Receita.RECEITA_RENOVAVEL);
            cs.execute();
            connection.commit();
        }
        catch(SQLException e) {}
        
    }
    
    public void emitirReceitaNormal(ReceitaNormal r) {
        
        String emRecProc = "{call InserirReceita(?,?,?,?,?,?,?,?,?)}";
        
        try {                       
            CallableStatement cs = connection.prepareCall(emRecProc);
            cs.setDate(1,new Date(r.getData().getTimeInMillis()));
            cs.setInt(2,Integer.parseInt(r.getUtente().getNum_utente()));
            cs.setInt(3,Integer.parseInt(r.getMedico().getCedula()));
            cs.setInt(4,Integer.parseInt(r.getConsulta()));
            cs.setString(5, r.getCod_postal());
            cs.setString(6, r.getLocalidade());            
            cs.setInt(7, r.getComparticipacao()); 
            cs.setInt(1, Receita.RECEITA_NORMAL);
            cs.execute();
            connection.commit();
        }
        catch(SQLException e) {}
        
    }
    
    public void introduzirMedicamento(MedicamentoNormal m,String codReceita) {
        
        String emRecProc = "{call InserirReceita(?,?,?,?,?)}";
        String embQuery ="select emb_id from lei2011_g50.emb where med_id = ?";
        int emb_id = 0;
        try {
            
            PreparedStatement ps = connection.prepareStatement(embQuery);
            ps.setInt(1, Integer.parseInt(m.getCodigo()));
            ResultSet rs = ps.executeQuery();
            
            while(rs.next())
                emb_id = rs.getInt("emb_id");
            
            CallableStatement cs = connection.prepareCall(emRecProc);
            cs.setInt(1,Integer.parseInt(codReceita));
            cs.setInt(2,emb_id);
            cs.setInt(3, m.getQuantidade());
            cs.setString(4,m.getPosologia());
            if(m.isGenerico())
                cs.setInt(5,1);
            else
                cs.setInt(5,0);
        }
        catch(SQLException e) {}
        
    }
    
    public String getCodReceita(ReceitaNormal r,String cod_ut, String cod_med) {
        String quer = "select cod_receita from receitas where cod_utente = ? and medicoscod_medico = ?";
        int res = 0;
        
        try{
            PreparedStatement ps = connection.prepareStatement(quer);
            ps.setInt(1,Integer.parseInt(cod_ut));
            ps.setInt(2,Integer.parseInt(cod_med));
            ResultSet rs = ps.executeQuery();
            
            while(rs.next())
                res = rs.getInt("cod_receita");
            
        }                
        catch(SQLException e) {}
        return Integer.toString(res);
        
    } 
    
}
